﻿// custom_new.cpp
#include "klog.h"
#include <cstdlib>

#include <EASTL/allocator.h>
#include <EASTL/string.h>
#include <EASTL/vector.h>

/*
 * TODO:
 * 我在使用EASTL的时候，EA自已的allocator调用了一个很奇怪的分配器，重载了new操作符。
 * 然后它这个操作符并没有实现。所以链接器报错。这东西就没一个默认的实现吗？
 * 我对于c++的内存机制根本没有深入的了解，所以没有办法处理这种情况。
 * 只能用最基础的new去实现这个操作符。它产生的后果是不明确的。
 */

void* operator new[](size_t size, const char* pName, int flags,
    unsigned debugFlags, const char* file, int line) {
  void* ptr = ::operator new[](size);
  if (!ptr) {
    throw std::bad_alloc(); // 分配失败时抛出异常
  }
  return ptr;
}
void* operator new[](size_t size, size_t alignment, size_t alignmentOffset,
    const char* pName, int flags, unsigned debugFlags, const char* file,
    int line) {
  void* ptr = ::operator new[](size);
  if (!ptr) {
    throw std::bad_alloc(); // 分配失败时抛出异常
  }
  return ptr;
}

void eastl_test() {
  eastl::vector<eastl::string> slist;
  eastl::string t("name");
  slist.push_back(t);
  KLOG("Name: %s, Array: %d", t.c_str(), slist.size());
}
